home *** CD-ROM | disk | FTP | other *** search
/ Aminet 5 / Aminet 5 - March 1995.iso / Aminet / dev / misc / LEDA_gene.lha / LEDA-3.1c-generic / incl / LEDA / circle.h < prev    next >
Encoding:
C/C++ Source or Header  |  1994-08-05  |  2.3 KB  |  107 lines

  1. /*******************************************************************************
  2. +
  3. +  LEDA  3.1c
  4. +
  5. +
  6. +  circle.h
  7. +
  8. +
  9. +  Copyright (c) 1994  by  Max-Planck-Institut fuer Informatik
  10. +  Im Stadtwald, 6600 Saarbruecken, FRG     
  11. +  All rights reserved.
  12. *******************************************************************************/
  13.  
  14.  
  15.  
  16. #ifndef LEDA_CIRCLE_H
  17. #define LEDA_CIRCLE_H
  18.  
  19. #include <LEDA/point.h>
  20. #include <LEDA/segment.h>
  21. #include <LEDA/line.h>
  22.  
  23. //------------------------------------------------------------------------------
  24. // circles
  25. //------------------------------------------------------------------------------
  26.  
  27.  
  28. class circle_rep : public handle_rep {
  29.  
  30. friend class circle;
  31.  
  32.   double  radius;
  33.   point   center; 
  34.   
  35. public:
  36.  
  37.   circle_rep() {}
  38.   circle_rep(const point& p, double r)  { center = p; radius = r; }
  39.  
  40.  ~circle_rep() {}
  41.  
  42.   LEDA_MEMORY(circle_rep)
  43.   
  44. };
  45.  
  46.  
  47. class circle   : public handle_base 
  48. {
  49.  
  50. circle_rep* ptr() const { return (circle_rep*)PTR; }
  51.  
  52. public:
  53.  
  54.  circle();
  55.  circle(const point& c, double r);
  56.  circle(double x, double y, double r);
  57.  circle(const circle& c) : handle_base(c) {}
  58.  
  59. ~circle()                { clear(); }
  60.  
  61. circle& operator=(const circle& C) { handle_base::operator=(C); return *this; }
  62.  
  63.  
  64.  
  65. int operator==(const circle&) const;
  66.  
  67. int operator!=(const circle& c) const { return !operator==(c); };
  68.  
  69. point center()  const { return ptr()->center; } 
  70. double radius() const { return ptr()->radius; }
  71.  
  72. double  distance(const point&) const;
  73. double  distance(const line&) const;
  74. double  distance(const circle&) const;
  75.  
  76. bool    inside(const point&) const;
  77. bool    outside(const point& p) const { return !inside(p); };
  78.  
  79. segment left_tangent(const point&) const;
  80. segment right_tangent(const point&) const;
  81.  
  82. circle  translate(double,double) const;
  83. circle  translate(const vector&) const; 
  84. circle  operator+(const vector& v) const { return translate(v); }
  85.  
  86. circle  rotate(const point&, double) const;
  87. circle  rotate(double) const;
  88.  
  89. list<point> intersection(const circle&) const;
  90. list<point> intersection(const line&) const;
  91. list<point> intersection(const segment&) const;
  92.  
  93. friend ostream& operator<<(ostream& out, const circle& c);
  94. friend istream& operator>>(istream& in, circle& c);  
  95.  
  96. };
  97.  
  98. inline void Print(const circle& c, ostream& out) { out << c; } 
  99. inline void Read(circle& c,  istream& in)        { in >> c; }
  100.  
  101. LEDA_HANDLE_TYPE(circle)
  102.  
  103.  
  104.  
  105. #endif
  106.